package cn.slipi.pan.common.base;

import cn.slipi.pan.common.constants.ExceptionConstants;
import cn.slipi.pan.common.response.ApiResult;
import cn.slipi.pan.common.response.PageResult;

import java.util.List;

/**
 * 接口基类
 */
public class BaseController {


    /**
     * 返回成功
     *
     * @return ApiResult
     */
    public ApiResult<?> success(ExceptionConstants exceptionConstants) {
        return new ApiResult<>(exceptionConstants.getCode(), exceptionConstants.getMessage());
    }

    /**
     * 返回成功
     *
     * @return ApiResult
     */
    public ApiResult<?> success() {
        return new ApiResult<>(ExceptionConstants.SUCCESS.getCode(), ExceptionConstants.SUCCESS.getMessage());
    }

    /**
     * 返回成功
     *
     * @param message 状态信息
     * @return ApiResult
     */
    public ApiResult<?> success(String message) {
        return success().setMessage(message);
    }

    /**
     * 返回成功
     *
     * @param data 返回数据
     * @return ApiResult
     */
    public <T> ApiResult<T> success(T data) {
        return new ApiResult<>(ExceptionConstants.SUCCESS.getCode(), ExceptionConstants.SUCCESS.getMessage(), data);
    }

    /**
     * 返回成功
     *
     * @param message 状态信息
     * @return ApiResult
     */
    public <T> ApiResult<T> success(String message, T data) {
        return success(data).setMessage(message);
    }

    /**
     * 返回成功
     *
     * @param message 状态信息
     * @return ApiResult
     */
    public <T> ApiResult<T> success(Integer code, String message, T data) {
        return success(data).setCode(code).setMessage(message);
    }

    /**
     * 返回成功
     *
     * @param code 状态码
     * @return ApiResult
     */
    public <T> ApiResult<T> success(Integer code, T data) {
        return success(data).setCode(code);
    }

    /**
     * 返回分页查询数据
     *
     * @param list  当前页数据
     * @param count 总数量
     * @return ApiResult
     */
    public <T> ApiResult<PageResult<T>> success(List<T> list, Long count) {
        return success(new PageResult<>(list, count));
    }

    /**
     * 返回失败
     *
     * @return ApiResult
     */
    public ApiResult<?> fail(ExceptionConstants exceptionConstants) {
        return new ApiResult<>(exceptionConstants.getCode(), exceptionConstants.getMessage());
    }

    /**
     * 返回失败
     *
     * @return ApiResult
     */
    public ApiResult<?> fail() {
        return new ApiResult<>(ExceptionConstants.SYSTEM_ERROR.getCode(), ExceptionConstants.SYSTEM_ERROR.getMessage());
    }

    /**
     * 返回失败
     *
     * @param message 状态信息
     * @return ApiResult
     */
    public ApiResult<?> fail(String message) {
        return fail().setMessage(message);
    }

    /**
     * 返回失败
     *
     * @param data 返回数据
     * @return ApiResult
     */
    public <T> ApiResult<T> fail(T data) {
        return fail(ExceptionConstants.SYSTEM_ERROR.getMessage(), data);
    }


    /**
     * 返回失败
     *
     * @param code    状态码
     * @param message 状态信息
     * @param <T>
     * @return
     */
    public <T> ApiResult<T> fail(Integer code, String message) {
        return new ApiResult<>(code, message);
    }

    /**
     * 返回失败
     *
     * @param message 状态信息
     * @param data    返回数据
     * @return ApiResult
     */
    public <T> ApiResult<T> fail(String message, T data) {
        return new ApiResult<>(ExceptionConstants.SYSTEM_ERROR.getCode(), message, data);
    }
}
